"""
https://leetcode.cn/problems/add-strings/description/
415. 字符串相加
简单
相关标签
相关企业
给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库（比如 BigInteger）， 也不能直接将输入的字符串转换为整数形式。



示例 1：

输入：num1 = "11", num2 = "123"
输出："134"
示例 2：

输入：num1 = "456", num2 = "77"
输出："533"
示例 3：

输入：num1 = "0", num2 = "0"
输出："0"




提示：

1 <= num1.length, num2.length <= 104
num1 和num2 都只包含数字 0-9
num1 和num2 都不包含任何前导零
"""

class Solution:
    def addStrings(self, num1: str, num2: str) -> str:
        """
        此题用普通的字符串转数字的方法肯定不行，因为字符串的长度过大，最多10000位。
        因此只能依据加法规则将之解析。
        :param num1:
        :param num2:
        :return:
        """

        # 将数字字符串传，逆序解析为字符数组
        lis1=[]
        for c in num1:
            lis1.insert(0,c)
        lis2=[]
        for c in num2:
            lis2.insert(0,c)

        # 根据加法规则，对两个新的数组进行计算，构建一个新的数组
        lis_res=[]
        max_len=max(len(num1),len(num2))
        next_ten=0
        for i in range(max_len):
            res_each=(int(lis1[i]) if i<len(lis1) else 0)+(int(lis2[i]) if i<len(lis2) else 0)+next_ten
            if res_each>=10:
                res_each-=10
                next_ten=1
            else:
                next_ten=0
            lis_res.append(str(res_each))

        if next_ten==1:
            lis_res.append('1')


        # 新数组逆序合并，构建结果
        return ''.join(reversed(lis_res))





if __name__ == '__main__':

    sol=Solution()

    res=sol.addStrings('0','0')
    print(res)

    pass